package com.fuhao.factory.simplefactory;

import org.apache.commons.lang.StringUtils;

/**
 * 车工厂：
 * 相当于一个4s店，什么车都有，所有买家都从这个店提车
 * @author zhang
 */

public class CarFactory {
	
	/**
	 * 简单工厂：
	 * 可以看出当类型非常多的时候，一个工厂要创建很多类型
	 * 扩展性不好
	 */
	
	public static Car createCar(String name) {
		if(StringUtils.isEmpty(name)) {
			return null;
		}
		//缺点：当类型非常多时候，不利于扩展
		if("奥迪".equals(name)) {
			return new AoDiCar();
		}
		if("宝马".equals(name)){
			return new BaoMaCar();
		}
		//业务:当想跨站更多的类型的时候，又不想重启服务器，重新加载类
		//方案：可以在数据库或者缓存中保存信息。利用反射+动态代理设计模式
		//例如：
		//在数据库创建一张汽车的类型表。
		//字段：id、名字、class地址、类名
		//伪代码如下
		/**
		 * 1.在数据库中根据传入的name查询记录,获取class地址、类名
		 * 2.Class<?> class = Class.forName(class地址);
		 * 3.类名 变量 = （类名）class.newInstance();
		 * 4.返回对象
		 */
		return null;
	}

}
